package cn.lg.soar.flow.biz.service;

import cn.lg.soar.flow.api.model.ApprovalTaskDTO;
import cn.lg.soar.flow.api.model.DoneDTO;
import cn.lg.soar.flow.api.model.ProgressVO;
import cn.lg.soar.flow.api.model.TodoDTO;
import cn.lg.soar.flow.biz.model.*;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.List;

/**
 * 节点审批人
 * @author luguoxiang
 * @since 2025-08-07
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public interface FlowInstanceService {

    List<String> getApprovers(Long userId);

    IPage<InstanceVO> page(IPage<InstanceVO> page, InstanceQuery query);

    IPage<InstanceVO> started(IPage<InstanceVO> page, InstanceQuery query);

    IPage<TodoDTO> todo(IPage<TodoDTO> page, Long userId, TodoQuery query);

    default IPage<TodoDTO> todo(IPage<TodoDTO> page, Long userId) {
        return todo(page, userId, new  TodoQuery());
    }

    IPage<DoneDTO> done(IPage<DoneDTO> page, Long userId, DoneQuery query);

    default IPage<DoneDTO> done(IPage<DoneDTO> page, Long userId) {
        return done(page, userId, new DoneQuery());
    }

    /**
     * 审批任务
     * @param userId 审批人
     * @param procInstId 流程实例id
     * @param taskKey 节点key(非必填)
     * @return
     */
    List<ApprovalTaskDTO> approvalTasks(Long userId, String procInstId, String taskKey);

    /**
     * 审批任务
     * @param userId
     * @param procInstId
     * @return
     */
    default List<ApprovalTaskDTO> approvalTasks(Long userId, String procInstId) {
        return approvalTasks(userId, procInstId, null);
    }

    ProgressVO progress(String procInstId);

    /**
     * 通过任务
     * @param passTaskDTO
     */
    void passTask(PassTaskDTO passTaskDTO);

    /**
     * 驳回任务
     * @param rejectTaskDTO
     */
    void rejectTask(RejectTaskDTO rejectTaskDTO);

}
